package com.cip.client;

import com.cip.client.dataSource.alumno.AlumnoDS;
import com.cip.client.dataSource.alumno.DatosComercialesDS;
import com.cip.client.dataSource.alumno.DatosComunicacionAlumnoDS;
import com.cip.client.dataSource.alumno.DatosLocalizacionAlumnoDS;
import com.cip.client.dataSource.alumno.ExperienciaProfesionalDS;
import com.cip.client.dataSource.alumno.IdiomaDS;
import com.cip.client.dataSource.alumno.ObservacionesAlumnoDS;
import com.cip.client.dataSource.alumno.TitulacionDS;
import com.cip.client.dataSource.matricula.CalificacionDS;
import com.cip.client.dataSource.matricula.FechasMatriculaDS;
import com.cip.client.dataSource.matricula.MatriculaDS;
import com.cip.client.dataSource.matricula.PagosDS;
import com.cip.client.dataSource.matricula.PrevisionPagosDS;
import com.cip.client.i18n.GridConstants;
import com.cip.client.servicios.GreetingService;
import com.cip.client.servicios.GreetingServiceAsync;
import com.cip.client.tablas.AlumnoTabla;
import com.cip.client.tablas.TablaSimple;
import com.google.gwt.core.client.GWT;
import com.google.gwt.user.client.Timer;
import com.google.gwt.user.client.rpc.AsyncCallback;
import com.smartgwt.client.data.Criteria;
import com.smartgwt.client.types.Side;
import com.smartgwt.client.widgets.Canvas;
import com.smartgwt.client.widgets.IButton;
import com.smartgwt.client.widgets.events.ClickEvent;
import com.smartgwt.client.widgets.events.ClickHandler;
import com.smartgwt.client.widgets.grid.ListGridRecord;
import com.smartgwt.client.widgets.grid.events.RecordClickEvent;
import com.smartgwt.client.widgets.grid.events.RecordClickHandler;
import com.smartgwt.client.widgets.layout.HLayout;
import com.smartgwt.client.widgets.layout.VLayout;
import com.smartgwt.client.widgets.tab.Tab;
import com.smartgwt.client.widgets.tab.TabSet;

public class TabAlumnos extends VLayout {
	FormSimple datosComunicacionForm;
	FormSimple datosLocalizacionForm;
	FormSimple datosComercialesForm;
	public TablaSimple alumnoTs;
	TablaSimple observacionesTs;
	TablaSimple expProfesionalTs;
	TablaSimple idiomasTs;
	TablaSimple titulacionesTs;

	TablaSimple matriculasTs;
	TablaSimple calificacionesTs;
	TablaSimple pagosTs;
	TablaSimple previsionPagosTs;
	FormSimple fechasForm;
	// public ListGrid tabla;

	TabSet tabSetSecundario;
	TabSet tabSetTerciario;

	private static TabAlumnos instance = null;

	public static TabAlumnos getInstance() {
		if (instance == null) {
			instance = new TabAlumnos();
		}
		return instance;
	}

	public void rellenaAcciones() {

		alumnoTs.tabla.addRecordClickHandler(new RecordClickHandler() {
			public void onRecordClick(RecordClickEvent event) {
				GridConstants c = GWT.create(GridConstants.class);

				ListGridRecord record = (ListGridRecord) event.getRecord();
				if (record == null)
					return;

				tabSetSecundario.setVisible(true);

				String tituloTabla = " " + record.getAttributeAsString("nombre") + " " + record.getAttributeAsString("apellido1") + " ("
						+ record.getAttributeAsString("nif") + ")";
				ObservacionesAlumnoDS obsDs = ObservacionesAlumnoDS.getInstance(record.getAttributeAsString("id"), "obs");
				observacionesTs.tabla.setDataSource(obsDs);
				observacionesTs.tabla.fetchData();
				observacionesTs.getSection(0).setTitle(c.observacion_titulo() + tituloTabla);

				MatriculaDS matDs = MatriculaDS.getInstance(record.getAttributeAsString("id"), "mat");
				matriculasTs.tabla.setDataSource(matDs);
				matriculasTs.tabla.fetchData();
				matriculasTs.getSection(0).setTitle(c.matricula_titulo() + tituloTabla);

				ExperienciaProfesionalDS expDs = ExperienciaProfesionalDS.getInstance(record.getAttributeAsString("id"), "exp");
				expProfesionalTs.tabla.setDataSource(expDs);
				expProfesionalTs.tabla.fetchData();
				expProfesionalTs.getSection(0).setTitle(c.experienciaProfesional_titulo() + tituloTabla);

				IdiomaDS idiDs = IdiomaDS.getInstance(record.getAttributeAsString("id"), "idi");
				idiomasTs.tabla.setDataSource(idiDs);
				idiomasTs.tabla.fetchData();
				idiomasTs.getSection(0).setTitle(c.idioma_titulo() + tituloTabla);

				TitulacionDS titDs = TitulacionDS.getInstance(record.getAttributeAsString("id"), "tit");
				titulacionesTs.tabla.setDataSource(titDs);
				titulacionesTs.tabla.fetchData();
				titulacionesTs.getSection(0).setTitle(c.titulacion_titulo() + tituloTabla);

				DatosComunicacionAlumnoDS datCom = DatosComunicacionAlumnoDS.getInstance(record.getAttributeAsString("id"), "datCom");
				datosComunicacionForm.form.setDataSource(datCom);
				datosComunicacionForm.form.fetchData();
				datosComunicacionForm.getSection(0).setTitle(c.datosComunicacion_titulo() + tituloTabla);

				DatosLocalizacionAlumnoDS datLoc = DatosLocalizacionAlumnoDS.getInstance(record.getAttributeAsString("id"), "datLoc");
				datosLocalizacionForm.form.setDataSource(datLoc);
				datosLocalizacionForm.form.fetchData();
				datosLocalizacionForm.getSection(0).setTitle(c.datosLocalizacion_titulo() + tituloTabla);

				DatosComercialesDS datComer = DatosComercialesDS.getInstance(record.getAttributeAsString("id"), "datComer");
				datosComercialesForm.form.setDataSource(datComer);
				datosComercialesForm.form.fetchData();
				datosComercialesForm.getSection(0).setTitle(c.datosComerciales_titulo() + tituloTabla);

			}
		});

		matriculasTs.tabla.addRecordClickHandler(new RecordClickHandler() {
			public void onRecordClick(RecordClickEvent event) {
				GridConstants c = GWT.create(GridConstants.class);

				ListGridRecord record = (ListGridRecord) event.getRecord();
				if (record == null)
					return;
				tabSetTerciario.setVisible(true);

				String tituloTabla = " " + record.getAttributeAsString("curso") + " " + record.getAttributeAsString("promocion");

				CalificacionDS calif = CalificacionDS.getInstance(record.getAttributeAsString("id"), "calif");
				calificacionesTs.tabla.setDataSource(calif);
				calificacionesTs.tabla.fetchData();
				calificacionesTs.getSection(0).setTitle(c.calificacion_titulo() + tituloTabla);

				PagosDS pagos = PagosDS.getInstance(record.getAttributeAsString("id"), "pagos");
				pagosTs.tabla.setDataSource(pagos);
				pagosTs.tabla.fetchData();
				pagosTs.getSection(0).setTitle(c.pago_titulo() + tituloTabla);

				PrevisionPagosDS prevPagos = PrevisionPagosDS.getInstance(record.getAttributeAsString("id"), "prevPagos");
				previsionPagosTs.tabla.setDataSource(prevPagos);
				previsionPagosTs.tabla.fetchData();
				previsionPagosTs.getSection(0).setTitle(c.previsionPago_titulo() + tituloTabla);

				FechasMatriculaDS fechasMat = FechasMatriculaDS.getInstance(record.getAttributeAsString("id"), "fechasMat");
				fechasForm.form.setDataSource(fechasMat);
				fechasForm.form.fetchData();
				fechasForm.getSection(0).setTitle(c.fechasMatricula_titulo() + tituloTabla);

			}
		});
	}

	IButton migrarBotton1;
	public int numRefresco = 0;
	public int operacion = 0;
	public final static int INCRE=4;

	public TabAlumnos() {
		GridConstants c = GWT.create(GridConstants.class);

		this.setTitle(c.alumno_titulo());
		// this.setMargin(new Integer(10));

		alumnoTs = new AlumnoTabla(new AlumnoDS(null, "alumnos"));
		alumnoTs.setTitle("Lista de alumnos");
		// System.out.println("vvv-"+alumnoTs.tabla.getField("nif").setPrompt("asdfasdf"));
		// alumnoTs.tabla.getField("nif").setPrompt("asdfasdf");
		tabSetSecundario = new TabSet();
		tabSetSecundario.setVisible(false);
		tabSetSecundario.setTabBarPosition(Side.TOP);
		// tabSetSecundario.setWidth("800");
		tabSetSecundario.setHeight100();
		// / tabSetSecundario.setMargin(new Integer(10));
		// tabSetSecundario.setBorder("2px solid green");

		Tab tabObservaciones = new Tab("Observaciones");
		tabObservaciones.setPane(observacionesTs = new TablaSimple(null));

		Tab tabMatriculas = new Tab("Matriculas");
		tabMatriculas.setPane(rellenaMatricula());

		Tab tabCurriculo = new Tab("Curriculo");
		tabCurriculo.setPane(rellenaCurriculoAlumno());

		Tab tabDatosComunicacion = new Tab("Datos de comunicacion");
		tabDatosComunicacion.setPane(datosComunicacionForm = new FormSimple(null));

		Tab tabDatosLocalizacion = new Tab("Datos de localizacion");
		tabDatosLocalizacion.setPane(datosLocalizacionForm = new FormSimple(null));

		Tab tabDatosComerciales = new Tab("Datos de comerciales");
		tabDatosComerciales.setPane(datosComercialesForm = new FormSimple(null));

		tabSetSecundario.setTabs(tabObservaciones, tabMatriculas, tabCurriculo, tabDatosComunicacion, tabDatosLocalizacion,
				tabDatosComerciales);

		this.addMember(alumnoTs);
		this.addMember(tabSetSecundario);
		this.setPadding(new Integer(10));
		rellenaAcciones();

		migrarBotton1 = new IButton("actualizar BD");
		migrarBotton1.setTop(10);
		migrarBotton1.setLeft(10);
		migrarBotton1.setWidth(200);
		migrarBotton1.addClickHandler(new ClickHandler() {
			public void onClick(ClickEvent event) {
				Timer refreshTimer = new Timer() {
					@Override
					public void run() {

						GreetingServiceAsync greetingService = GWT.create(GreetingService.class);
						greetingService.query("actualiza", numRefresco, INCRE, new AsyncCallback<String>() {
							public void onFailure(Throwable caught) {
								System.out.println("errpr");
							}

							public void onSuccess(String result) {
								System.out.println("desde el servidor:" + result);
								migrarBotton1.setTitle("actualizando " + numRefresco + ". " + result+" oper="+operacion);
								numRefresco += INCRE;

								if (result.equals("fin")) {
									operacion++;
									numRefresco = 0;
								}
							}
						});

						
						System.out.println("refrescando" + numRefresco);
					}
				};
				refreshTimer.scheduleRepeating(1000);
			}
		});
		migrarBotton1.draw();

		IButton filtrar = new IButton("Filtrar BD");
		filtrar.setTop(50);
		filtrar.setLeft(10);

		filtrar.addClickHandler(new ClickHandler() {
			public void onClick(ClickEvent event) {

				Criteria c = new Criteria();
				c.addCriteria("nombre", "Angel");
				// c.addCriteria("apellido1","Hern?ndez");

				alumnoTs.tabla.filterData(c);
				// alumnoTs.tabla.getDataa.fetchData(new
				// Criteria("nombre","Leticia"));
				// alumnoTs.tabla.setCriteria(c);

				System.out.println("fitro");

			}
		});
		filtrar.draw();
	}

	private Canvas rellenaCurriculoAlumno() {
		VLayout vl = new VLayout(10);

		titulacionesTs = new TablaSimple(null);
		expProfesionalTs = new TablaSimple(null);
		idiomasTs = new TablaSimple(null);

		vl.setChildren(titulacionesTs, expProfesionalTs, idiomasTs);
		return vl;
	}

	private Canvas rellenaMatricula() {
		VLayout vl = new VLayout(10);
		vl.setPadding(new Integer(10));
		// vStack.setWidth100();
		// vStack.setHeight100();

		matriculasTs = new TablaSimple(null);

		tabSetTerciario = new TabSet();
		tabSetTerciario.setVisible(false);
		tabSetTerciario.setTabBarPosition(Side.TOP);
		// / tabSetTerciario.setMargin(new Integer(10));
		// tabSetSecundario.setWidth("800");
		// tabSetTerciario.setHeight100();
		// tabSetSecundario.setBorder("2px solid green");

		Tab tabCalificaciones = new Tab("Calificaciones");
		tabCalificaciones.setPane(calificacionesTs = new TablaSimple(null));

		Tab tabFechas = new Tab("Fechas");
		tabFechas.setPane(fechasForm = new FormSimple(null));

		Tab tabPagos = new Tab("Pagos");
		tabPagos.setPane(rellenaPagos());

		tabSetTerciario.setTabs(tabFechas, tabCalificaciones, tabPagos);
		vl.addMember(matriculasTs);
		vl.addMember(tabSetTerciario);
		// vl.setChildren(matriculasTs,tabSetSecundario);
		return vl;
	}

	private Canvas rellenaPagos() {
		HLayout hl = new HLayout(10);

		pagosTs = new TablaSimple(null);
		previsionPagosTs = new TablaSimple(null);

		hl.setChildren(pagosTs, previsionPagosTs);
		return hl;
	}
}
